#include "directory_scanner.hpp"
#include <dirent.h>
#include <sys/stat.h>
#include <cstring>



std::vector<std::string> DirectoryScanner::scan(const std::string& dir_path) {
    /*
        功能：浏览文件夹下所有文件，返回一个文件列表
    */
    std::vector<std::string> fileList;
    DIR* dp = opendir(dir_path.c_str());
    if (dp == nullptr) {
        return fileList;
    }

    dirent* entry;
    while ((entry = readdir(dp)) != nullptr) {
        // 跳过"." 和".."
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        std::string fullPath = dir_path + "/" + entry->d_name;
        struct stat fileStat;
        if (stat(fullPath.c_str(), &fileStat) == 0) {
            // 如果是目录，则递归扫描
            if (S_ISDIR(fileStat.st_mode)) {
                std::vector<std::string> subDir = scan(fullPath);
                fileList.insert(fileList.end(), subDir.begin(), subDir.end()); 
            }
            else {
                // 如果是文件，添加到列表
                fileList.push_back(fullPath);
            }
        }
    }

    closedir(dp);
    return fileList;
}

